home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 09 - 1993 / 09.02 Feb 93 / Jörg's Folder / New.Cold.4th < prev    next >
Encoding:
Text File  |  1992-11-04  |  4.1 KB  |  158 lines  |  [TEXT/NISI]

  1. ONLY DEVELOPMENT
  2. ALSO MAC
  3. ALSO ASSEMBLER
  4. ALSO FORTH DEFINITIONS
  5.  
  6. HEADER new.COLD.start
  7. CODE new.COLD
  8.     \
  9.     \ first test to see if AppleEvents are available
  10.     \ and we have come through here before
  11.     \
  12.     MOVE.L    MACH2.flags,D0
  13.     BTST #1,D0
  14.     BEQ.S    @first.part
  15.  
  16.     \ now test to see if the IOTASK has been already set up
  17.     BTST    #4,D0
  18.     BEQ.S    @first.part
  19.     
  20.     ANDI.L    #$FFFFFFEF,MACH2.flags
  21.     BRA.S    @second.part
  22.  
  23. @first.part
  24.     ORI.L        #$10,MACH2.flags
  25.     JSR        $14A(A5)            \ - INIT calls, code4,off32
  26.     JSR        $-2BEA(PC)            \ $4B4B6E - create SYS_WINDOW
  27.     [ HERE 2- ' new.COLD.start - 12252 +        \ offset of this instruction
  28.       $4B4B6E $4B4AA8 -                        \ offset of routine
  29.       - NEGATE HERE 2- W! ]
  30.  
  31.     JSR        $5A2(A5)            \ - save var ptr in -55E(A5)
  32.                                 \ allocate stack space
  33.                                 \ setup D4 for trap stack
  34.     JSR        $47A(A5)            \ - set exception vectors
  35.     JSR        $-EC(PC)            \ $4B7678 - patch trap $A9C9
  36.     [ HERE 2- ' new.COLD.start - 12252 +        \ offset of this instruction
  37.       $4B7678 $4B4AA8 -                        \ offset of routine
  38.       - NEGATE HERE 2- W! ]
  39.  
  40.     JSR        $182(A5)            \ - init, allocate blocks
  41.     JSR        $54A(A5)            \ EMPTY-BUFFERS
  42.     JSR        $27A(A5)            \ clear various Variables
  43.     JSR        $1B2(A5)            \ initialize ioCompletion procs
  44.     JSR        $30A(A5)            \ - setup the ioTask
  45.     \ we are now on the ioTask A7
  46.  
  47.     \ now test to see if we should skip back for the AppleEvents
  48.     \
  49.     MOVE.L    MACH2.flags,D0
  50.     BTST    #1,D0
  51.     BNE.S    @thisexit
  52.  
  53. @second.part
  54.     JSR        $-5B4(PC)            \ $4B71C8 - install dictionary
  55.     [ HERE 2- ' new.COLD.start - 12252 +    \ offset of this instruction
  56.       $4B71C8 $4B4AA8 -                        \ offset of routine
  57.       - NEGATE HERE 2- W! ]
  58.  
  59.     JSR        $-292(PC)            \ $4B74EE - setup VP
  60.     [ HERE 2- ' new.COLD.start - 12252 +    \ offset of this instruction
  61.       $4B74EE $4B4AA8 -                        \ offset of routine
  62.       - NEGATE HERE 2- W! ]
  63.  
  64.     JSR        $-23E(PC)            \ $4B7546 - setup new code segment
  65.     [ HERE 2- ' new.COLD.start - 12252 +    \ offset of this instruction
  66.       $4B7546 $4B4AA8 -                        \ offset of routine
  67.       - NEGATE HERE 2- W! ]
  68.  
  69.     JSR        $-2D8(PC)            \ $4B74B0 - allocate hash table
  70.     [ HERE 2- ' new.COLD.start - 12252 +    \ offset of this instruction
  71.       $4B74B0 $4B4AA8 -                        \ offset of routine
  72.       - NEGATE HERE 2- W! ]
  73.  
  74.     JSR        $1F2(PC)            \ $4B797E - create hash table
  75.     [ HERE 2- ' new.COLD.start - 12252 +    \ offset of this instruction
  76.       $4B797E $4B4AA8 -                        \ offset of routine
  77.       - NEGATE HERE 2- W! ]
  78.  
  79. @thisexit
  80.     RTS
  81. END-CODE
  82. HEADER new.COLD.end
  83.  
  84. : patch.CODE10
  85.     { | resh CODE10.ptr old.COLD.entry res.refnum
  86.         @filename }
  87.     ASCII CODE 10 CALL GetResource -> resh
  88.     resh 0= NOT
  89.     IF
  90.         resh CALL HandToHand 0= NOT
  91.         IF
  92.             CR ." Could not duplicate the CODE 10 handle."
  93.         THEN
  94.         -> resh
  95.         resh CALL GetHandleSize 
  96.         ['] new.COLD.end ['] new.COLD.start - +
  97.         resh SWAP CALL SetHandleSize 
  98.         0= NOT 
  99.         IF
  100.             CR ." Could not increase CODE 10 to add patch."
  101.             resh CALL DisposHandle DROP
  102.             ABORT
  103.         THEN
  104.         resh CALL HLock DROP
  105.         ( copy the new code into the segment )
  106.         resh @ CALL StripAddress -> CODE10.ptr
  107.         ['] new.COLD.start 
  108.         code10.ptr 12256 + 
  109.         ['] new.COLD.end ['] new.COLD.start - 
  110.         CMOVE
  111.  
  112.         ( now patch the old COLD routine )
  113.         $4B7752 $4B4AA4 - CODE10.ptr + -> old.COLD.entry
  114.         $4EFA old.COLD.entry W!            ( JMP d(PC) )
  115.         CODE10.ptr 12256 + 
  116.         CODE10.ptr $4B7752 $4B4AA4 - +
  117.         - 2-
  118.         old.COLD.entry 2+ W!
  119.  
  120.         ( the routine is patched, now write it out to a file )
  121.         " New CODE10" -> @filename
  122.         @filename CALL CreateResFile 
  123.         @filename CALL OpenResFile -> res.refnum
  124.         res.refnum -1 =
  125.         IF
  126.             CR ." Could not open the output resource file.  Use BYE."
  127.             resh CALL HUnlock DROP resh CALL DisposHandle DROP
  128.             ABORT
  129.         THEN
  130.         res.refnum CALL UseResFile
  131.  
  132.         ( delete any old resource )
  133.         ASCII CODE 10 CALL GetResource 
  134.         DUP 0<
  135.         IF
  136.             CR ." Resource Error while trying to access CODE10 file."
  137.             resh CALL HUnlock DROP resh CALL DisposHandle DROP
  138.             res.refnum CALL CloseResFile
  139.             ABORT
  140.         THEN
  141.         CALL RmveResource
  142.         res.refnum CALL UpdateResFile
  143.  
  144.         ( add the resource )
  145.         resh ASCII CODE 10 " Compiler" CALL AddResource 
  146.         res.refnum CALL UpdateResFile
  147.         res.refnum CALL CloseResFile
  148.  
  149.         resh CALL HUnlock DROP
  150.         resh CALL DisposHandle DROP
  151.     ELSE
  152.         CR ." Could not get the Code 10 resource." ABORT
  153.     THEN
  154.     ;
  155.  
  156. CR .( Execute the word "patch.CODE10" to write out the new )
  157. CR .( CODE 10 resource to the file "New CODE10" )
  158. CR